#!/usr/bin/env python3
"""
创建缺失的数据库表
这个脚本用于创建 user_stats 和 conversation_files 表
"""

import os
import sys
from flask import Flask
from extensions import db
from models import UserStats, ConversationFile
from config import Config

def create_missing_tables():
    """创建缺失的数据库表"""
    app = Flask(__name__)
    
    # 数据库配置
    basedir = os.path.abspath(os.path.dirname(__file__))
    app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'biomni.db')
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {
        'pool_pre_ping': True,
        'pool_recycle': 300,
    }
    
    # 初始化数据库
    db.init_app(app)
    
    with app.app_context():
        try:
            # 检查表是否存在
            inspector = db.inspect(db.engine)
            existing_tables = inspector.get_table_names()
            
            print(f"现有表: {existing_tables}")
            
            # 创建缺失的表
            if 'user_stats' not in existing_tables:
                print("创建 user_stats 表...")
                UserStats.__table__.create(db.engine)
                print("user_stats 表创建成功")
            else:
                print("user_stats 表已存在")
                
            if 'conversation_files' not in existing_tables:
                print("创建 conversation_files 表...")
                ConversationFile.__table__.create(db.engine)
                print("conversation_files 表创建成功")
            else:
                print("conversation_files 表已存在")
                
            print("数据库表检查和创建完成")
            
        except Exception as e:
            print(f"创建表时出错: {e}")
            return False
            
    return True

if __name__ == '__main__':
    success = create_missing_tables()
    if success:
        print("所有表创建成功")
        sys.exit(0)
    else:
        print("表创建失败")
        sys.exit(1)